﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace LightEngine
{
    namespace Utilities
    {
        namespace ApplicationAssembly
        {
            /// <описание класса public class AssemblyAttributes>
            /// Версия класса 1.0
            /// Автор(ы): Ушаков Михаил
            /// Класс предназначен для получения информации об атрибутах сборки в Assembly в виде строк.
            /// Элементы класса:
            /// 1. Константы класса:
            ///    отсутствуют.
            /// 2. Поля класса:
            ///    отсутствуют.
            /// 3. Методы класса:
            /// а) public String AssemblyTitleAttributeValue() получение атрибута AssemblyTitle, если 
            ///    данный атрибут возможно получить возвращается его строковое значение, 
            ///    иначе String.Empty.
            /// б) public String AssemblyDescriptionAttributeValue() получение атрибута AssemblyDescription, 
            ///    если данный атрибут возможно получить возвращается его строковое значение, иначе String.Empty.
            /// в) public String AssemblyProductAttributeValue() получение атрибута AssemblyProduct, если 
            ///    данный атрибут возможно получить возвращается его строковое значение, 
            ///    иначе String.Empty.
            /// г) public String AssemblyConfigurationAttributeValue() получение атрибута 
            ///    AssemblyConfiguration, если данный атрибут возможно получить возвращается его строковое 
            ///    значение, иначе String.Empty.
            /// д) public String AssemblyCompanyAttributeValue() получение атрибута AssemblyCompany, если 
            ///    данный атрибут возможно получить возвращается его строковое значение, 
            ///    иначе String.Empty.
            /// е) public String AssemblyCopyrightAttributeValue() получение атрибута AssemblyCopyright, если 
            ///    данный атрибут возможно получить возвращается его строковое значение, 
            ///    иначе String.Empty.
            /// ж) public String AssemblyTrademarkAttributeValue() получение атрибута AssemblyTitle, если 
            ///    данный атрибут возможно получить возвращается его строковое значение, 
            ///    иначе String.Empty.
            /// 4. Свойства и индексаторы класса:
            ///    отсутствуют
            /// </описание класса public class AssemblyAttributes>
            public class AssemblyAttributes
            {
                public String AssemblyTitleAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyTitleAttribute AssemblyTitle = (AssemblyTitleAttribute)Attributes[0];
                    return AssemblyTitle.Title;
                }

                public String AssemblyDescriptionAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyDescriptionAttribute AssemblyDescription = (AssemblyDescriptionAttribute)Attributes[0];
                    return AssemblyDescription.Description;
                }

                public String AssemblyProductAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyProductAttribute AssemblyProduct = (AssemblyProductAttribute)Attributes[0];
                    return AssemblyProduct.Product;
                }

                public String AssemblyConfigurationAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyConfigurationAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyConfigurationAttribute AssemblyConfig = (AssemblyConfigurationAttribute)Attributes[0];
                    return AssemblyConfig.Configuration;
                }

                public String AssemblyCompanyAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyCompanyAttribute AssemblyCompany = (AssemblyCompanyAttribute)Attributes[0];
                    return AssemblyCompany.Company;
                }

                public String AssemblyCopyrightAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyCopyrightAttribute AssemblyRights = (AssemblyCopyrightAttribute)Attributes[0];
                    return AssemblyRights.Copyright;
                }

                public String AssemblyTrademarkAttributeValue()
                {
                    object[] Attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTrademarkAttribute), false);
                    if (Attributes.Length == 0)
                        return String.Empty;
                    AssemblyTrademarkAttribute AssemblyMark = (AssemblyTrademarkAttribute)Attributes[0];
                    return AssemblyMark.Trademark;
                }
            }
        }
    }
}
